﻿//1089. 复写零
//给你一个长度固定的整数数组 arr ，请你将该数组中出现的每个零都复写一遍，并将其余的元素向右平移。
//注意：请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改，不要从函数返回任何东西。

class Solution
{
public:
    void duplicateZeros(vector<int>& arr)
    {
        int n = arr.size();
        int top = 0, i = -1;
        while (top < n)
        {
            i++;
            if (arr[i])
                top++;
            else
                top += 2;
        }
        int j = n - 1;
        //末尾为0
        if (top == n + 1)
        {
            arr[j--] = arr[i--];
        }
        while (i >= 0)
        {
            //arr[i]为0
            if (!arr[i])
            {
                arr[j--] = arr[i];
            }
            arr[j--] = arr[i--];
        }
    }
};